package hbbft

type Config struct {
	// 节点数
	N int
	// 恶意节点数
	F int
	// 节点标识
	ID uint64
	// 所有节点的标识
	Nodes []uint64
	// 每个epoch提交的最大交易数量
	BatchSize int
	// 网络配置
	SelfAddr string            // 本节点监听地址 "0.0.0.0:8000"
	Peers    map[uint64]string // 其他节点地址 {1: "192.168.1.2:8000", 2: "192.168.1.3:8000"}
	// 论文实验开关：启用简化模式（跳过默克尔证明验证、阈值加密等，用于性能评估）
	SkipProofVerify bool
}

// hb
type HBMessage struct {
	Epoch   uint64
	Payload interface{}
}

// rbc
type BroadcastMessage struct {
	Payload interface{}
}

// bba
type AgreementMessage struct {
	Epoch   uint64
	Message interface{}
}

// rbc
type RBCMessage struct {
	Epoch   uint64
	Message interface{}
}

// bba
type BBAMessage struct {
	Epoch   uint64
	Message interface{}
}

// 加密批次（可安全序列化的纯字节结构）
type EncryptedBatch struct {
	// 提案者ID
	ProposerID uint64
	// 批次索引
	BatchIndex int
	// 加密密钥的TPKE密文组分（序列化后的字节）
	TKeyU []byte // Ciphertext.U序列化
	TKeyV []byte // Ciphertext.V
	TKeyW []byte // Ciphertext.W序列化
	// AES加密的交易数据
	CipherData []byte
}

// 解密份额消息
type DecryptShareMsg struct {
	Epoch      uint64 // epoch编号
	ProposerID uint64 // 提案者ID
	BatchIndex int    // 批次在ACS输出中的索引
	// 解密份额（DecryptionShare序列化后的字节）
	ShareU []byte // DecryptionShare.U_i序列化
}
